package br.com.sovi.gwt.client.historico;

import java.util.Date;
import java.util.List;

import br.com.sovi.gwt.client.entity.Historico;
import br.com.sovi.gwt.client.historico.HistoricoFiltroPanel.ActionListener;
import br.com.sovi.gwt.client.historico.service.HistoricoService;
import br.com.sovi.gwt.client.historico.service.HistoricoServiceAsync;
import br.com.sovi.gwt.client.rpc.SecureAsyncCallback;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;

public class HistoricoFiltroController {

	private HistoricoServiceAsync service;

	private HistoricoFiltroPanel panel;

	private final HistoricoListener historicoListener;

	public HistoricoFiltroController(HistoricoListener historicoListener) {
		this.historicoListener = historicoListener;
		service = (HistoricoServiceAsync) GWT.create(HistoricoService.class);

		panel = new HistoricoFiltroPanel(new ActionListener() {
			@Override
			public void gerarRota(String dispositivo, Date inicialDate, Date finalDate) {
				HistoricoFiltroController.this.gerarRota(dispositivo, inicialDate, finalDate);
			}

			@Override
			public void updateDispositivos() {
				HistoricoFiltroController.this.updateDispositivos();
			}
		});
	}

	protected void gerarRota(String dispositivo, Date dataInicial, Date dataFinal) {
		service.getPontoByDispositivoAndDate(dispositivo, dataInicial, dataFinal,
				new SecureAsyncCallback<Historico>() {
					@Override
					public void onFailure(Throwable caught) {
						super.onFailure(caught);
						Window.alert("Não foi possível buscar esta rota.");
					}

					@Override
					public void onSuccess(Historico historico) {
						historicoListener.onUpdate(historico);
					}
				});
	}

	private void updateDispositivos() {
		service.getAllDispositivos(new SecureAsyncCallback<List<String>>() {

			@Override
			public void onSuccess(List<String> result) {
				panel.populateDispositivosBox(result);
			}
		});
	}

	public HistoricoFiltroPanel getPanel() {
		return panel;
	}

}
